package com.person.monitor.location;

import android.app.Activity;
import android.content.Context;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.person.monitor.MyLog;


public class GaodeLocation extends BaseLocation {

    private AMapLocationClient locationClient = null;

    public GaodeLocation(Context activity) {
        super(activity);
        //初始化client
        locationClient = new AMapLocationClient(activity);
        //设置定位参数
        locationClient.setLocationOption(getDefaultOption());
        // 设置定位监听
        locationClient.setLocationListener(locationListener);
    }

    @Override
    public void startLocation() {
        locationClient.startLocation();
    }

    @Override
    public void stopLocation() {
        locationClient.stopLocation();
    }


    /**
     * 默认的定位参数
     * @since 2.8.0
     * @author hongming.wang
     *
     */
    private AMapLocationClientOption getDefaultOption(){
        AMapLocationClientOption mOption = new AMapLocationClientOption();
        mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);//可选，设置定位模式，可选的模式有高精度、仅设备、仅网络。默认为高精度模式
        mOption.setGpsFirst(false);//可选，设置是否gps优先，只在高精度模式下有效。默认关闭
        mOption.setHttpTimeOut(15*1000);//可选，设置网络请求超时时间。默认为30秒。在仅设备模式下无效
        mOption.setInterval(10*1000);//可选，设置定位间隔。默认为2秒
        mOption.setNeedAddress(false);//可选，设置是否返回逆地理地址信息。默认是true
        mOption.setOnceLocation(false);//可选，设置是否单次定位。默认是false
        mOption.setOnceLocationLatest(false);//可选，设置是否等待wifi刷新，默认为false.如果设置为true,会自动变为单次定位，持续定位时不要使用
        AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTPS);//可选， 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
        mOption.setSensorEnable(false);//可选，设置是否使用传感器。默认是false
        mOption.setWifiScan(true); //可选，设置是否开启wifi扫描。默认为true，如果设置为false会同时停止主动刷新，停止以后完全依赖于系统刷新，定位位置可能存在误差
        mOption.setLocationCacheEnable(true); //可选，设置是否使用缓存定位，默认为true

        return mOption;
    }

    /**
     * 定位监听
     */
    AMapLocationListener locationListener = new AMapLocationListener() {
        @Override
        public void onLocationChanged(AMapLocation location) {
            if (null != location) {
                if(location.getErrorCode() == 0){
                    MyLog.E("onLocationChanged location success");
                    locationSuccess(location.getLatitude(),location.getLongitude() , null);
                } else {
                    locationFail(getErrorTipByCode(location.getErrorCode()));
                    MyLog.E("onLocationChanged location.getErrorCode()="+location.getErrorCode());
                }
            } else {
                locationFail("location_fail");
                MyLog.E("onLocationChanged location is NULL");
            }
        }
    };

    private String getErrorTipByCode(int code){
        String ret = "location_fail";

        switch (code){
            case 21:  ret = ""; break;
        }

        return ret;
    }
}
